package com.dkm.orproject.dkmoa.service.serviceimpl.flow;

import com.dkm.orproject.dkmoa.dao.*;
import com.dkm.orproject.dkmoa.domain.*;
import com.dkm.orproject.dkmoa.domain.vo.OaDimissionHandoverVo;
import com.dkm.orproject.dkmoa.service.flow.OaDimissionHandoverService;
import com.dkm.orproject.utils.utils.IdToobtainUtils;
import com.github.pagehelper.PageHelper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 *  @ClassName : OaDimissionHandoverSerivceImpl  //类名
 *  @Description :   //描述
 *  @Author : 石智诚  //作者
 *  @Date: 2020-09-16 09:35  //时间
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class OaDimissionHandoverServiceImpl implements OaDimissionHandoverService {
    /**
     * 员工离职交接mapper
     */
    @Resource
    OaDimissionHandoverMapper handoverMapper;
    /**
     * 流程记录日志
     */
    @Resource
    OaFlowScheduleMapper scheduleMapper;
    /**
     * 通知Mapper
     */
    @Resource
    OaMessageMapper messageMapper;
    /**
     * 通知人员关联Mapper
     */
    @Resource
    OaInformMapper informMapper;
    /**
     * id 工具类
     */
    @Resource
    IdToobtainUtils idToobtainUtils;
    @Resource
    OaPersonnelMapper personnelMapper;
    /**
     * 部门Mapper
     */
    @Resource
    OaDepartmentMapper departmentMapper;
    /**
     * 开始节点
     */
    static final Long START_NODE = 755740216152698880L;
    /**
     * 部门审核节点
     */
    static final Long AUDIT_DEPARTMENT_NODE = 755740513897951232L;
    /**
     * 行政部审核节点
     */
    static final Long AUDIT_SECTION_NODE = 755756427469008896L;
    /**
     * 当事人审核节点
     */
    static final Long AUDIT_PERSON_NODE = 758289110145314816L;
    /**
     * 人事经理审核节点id
     */
    static final Long AUDIT_STAFFING_NODE = 755801712148754432L;
    /**
     * 总经理审核节点id
     */
    static final Long AUDIT_EXECUTIVE_NODE = 755807901372788736L;
    /**
     * 结束节点id
     */
    static final Long OVER_NODE = 756098928335794176L;
    /**
     * 起草新增
     *
     * @param handover  离职交接模型
     * @param personnel 人员
     * @param pname
     * @return 回调函数
     */
    @Override
    public int add(OaDimissionHandover handover, OaPersonnel personnel,String pname) {
        // 创建人名
        handover.setCreatedBy(personnel.getPersonnelName());
        // 交接人Id
        handover.setHandoverDepartmentReceiver(personnel.getPkPersonnelId());
        // 离职交接名称
        handover.setDimissionHandoverName(pname+ "的离职交接流程");
        // D 为部门负责人审核
        handover.setIsRevision("D");
        // 进度设置为部门负责人审核
        handover.setHandoverSchedule(AUDIT_DEPARTMENT_NODE);
        // 判断是否更新或者修改
        if (handover.getPkDimissionHandoverId() == null) {
            //生成交接ID
            handover.setPkDimissionHandoverId(idToobtainUtils.getNumberId());
            //流程记录
            OaFlowSchedule flowSchedule = new OaFlowSchedule();
            // 流程记录id
            flowSchedule.setPkFlowScheduleId(idToobtainUtils.getNumberId());
            // 交接工作流程id 起草id
            flowSchedule.setFlowId(START_NODE);
            // 绑定表单
            flowSchedule.setFormId(handover.getPkDimissionHandoverId());
            // 人员id
            flowSchedule.setPersonnelId(personnel.getPkPersonnelId());
            // 通过原因
            flowSchedule.setFormReason(" ");
            //创建人
            flowSchedule.setCreatedBy(personnel.getPersonnelName());
            // 新增离职流程记录
            scheduleMapper.insertSelective(flowSchedule);
            // 删除多余的通知
            messageMapper.deleteByFormId(handover.getDimissionId());
            // 新建通知
            OaMessage message=new OaMessage();
            // 链接地址
            message.setMessageUrl("pages/dkmoa/front/flow/dimissionHover/dimissionHoverDepartment.html?pkDimissionHandoverId=");
            //通知id
            message.setPkMessageId(idToobtainUtils.getNumberId());
            //2 待办
            addMeassge(message,personnel.getPersonnelName(),handover.getPkDimissionHandoverId(),
                    handover.getDimissionHandoverName(),"2");
            //通知部门领导
            Long personnelId = departmentMapper.selectByPrimaryKey(personnel.getPkDepartmentId()).getPersonnelId();
            noPass(personnelId,message.getPkMessageId());
            return handoverMapper.insertSelective(handover);
        } else {
            //流程记录
            OaFlowSchedule flowSchedule = new OaFlowSchedule();
            // 流程记录id
            flowSchedule.setPkFlowScheduleId(idToobtainUtils.getNumberId());
            // 交接工作流程id 起草id
            flowSchedule.setFlowId(START_NODE);
            // 绑定表单
            flowSchedule.setFormId(handover.getPkDimissionHandoverId());
            // 人员id
            flowSchedule.setPersonnelId(personnel.getPkPersonnelId());
            // 通过原因
            flowSchedule.setFormReason(" ");
            //审核人
            flowSchedule.setCreatedBy(personnel.getPersonnelName());
            // 新增离职流程记录
            scheduleMapper.insertSelective(flowSchedule);
            // 删除多余的通知(因为被部门领导驳回，此处id 应该为离职交接流程id )
            messageMapper.deleteByFormId(handover.getPkDimissionHandoverId());
            // 新建通知
            OaMessage message = new OaMessage();
            // 链接地址
            message.setMessageUrl("pages/dkmoa/front/flow/dimissionHover/dimissionHoverDepartment.html?pkDimissionHandoverId=");
            //通知id
            message.setPkMessageId(idToobtainUtils.getNumberId());
            //2 待办
            addMeassge(message, personnel.getPersonnelName(), handover.getPkDimissionHandoverId(),
                    handover.getDimissionHandoverName(), "2");
            //查询部门领导
            Long personnelId = departmentMapper.selectByPrimaryKey(personnel.getPkDepartmentId()).getPersonnelId();
            //新建关联
            noPass(personnelId, message.getPkMessageId());
            return handoverMapper.updateByPrimaryKeySelective(handover);
        }

    }

    /**
     * 部门负责人审核
     *
     * @param pkDimissionHandoverId 离职交接
     * @param personnel             更新的人名字
     * @return 回调函数
     */
    @Override
    public int departmentPass(Long pkDimissionHandoverId, OaPersonnel personnel) {
        OaDimissionHandover oaDimissionHandover = handoverMapper.selectByPrimaryKey(pkDimissionHandoverId);
        // S为行政部事审核
        oaDimissionHandover.setIsRevision("S");
        // 进度设置为行政部填写
        oaDimissionHandover.setHandoverSchedule(AUDIT_SECTION_NODE);
        //部门负责人审核时间
        oaDimissionHandover.setLeadershipContentTime(new Date());
        //审核人
        oaDimissionHandover.setUpdatedBy(personnel.getPersonnelName());
        //流程记录
        OaFlowSchedule flowSchedule = new OaFlowSchedule();
        // 流程记录id
        flowSchedule.setPkFlowScheduleId(idToobtainUtils.getNumberId());
        // 离职流程id  部门领导审核节点
        flowSchedule.setFlowId(AUDIT_DEPARTMENT_NODE);
        // 绑定表单
        flowSchedule.setFormId(oaDimissionHandover.getPkDimissionHandoverId());
        // 人员id
        flowSchedule.setPersonnelId(personnel.getPkPersonnelId());
        // 通过原因
        flowSchedule.setFormReason(" ");
        //审核人
        flowSchedule.setCreatedBy(personnel.getPersonnelName());
        // 新增离职交接流程记录
        scheduleMapper.insertSelective(flowSchedule);
        // 删除多余的通知
        messageMapper.deleteByFormId(oaDimissionHandover.getPkDimissionHandoverId());

        OaMessage message=new OaMessage();
        // 链接地址
        message.setMessageUrl("pages/dkmoa/front/flow/dimissionHover/dimissionHoverAdmin.html?pkDimissionHandoverId=");
        //id
        message.setPkMessageId(idToobtainUtils.getNumberId());

        addMeassge(message,personnel.getPersonnelName(),oaDimissionHandover.getPkDimissionHandoverId(),
                oaDimissionHandover.getDimissionHandoverName(),"2");
        // 根据流程id查询人员
        List<Long> personnelIds = personnelMapper.selectByHover("HOVER_ADMIN_INFORM");
        //新建关联
        findPersons(personnelIds,message);
        return handoverMapper.updateByPrimaryKeySelective(oaDimissionHandover);
    }

    /**
     * 部门负责人不通过
     *
     * @param pkDimissionHandoverId 流程交接ID
     * @param personnel             人员
     * @param departmentLeadership  不通过的原因
     * @return 更新的数字
     */
    @Override
    public int departmentNoPass(Long pkDimissionHandoverId, OaPersonnel personnel, String departmentLeadership) {
        OaDimissionHandover oaDimissionHandover = handoverMapper.selectByPrimaryKey(pkDimissionHandoverId);
        // C为起草节点
        oaDimissionHandover.setIsRevision("C");
        // 进度设置为行政部审核
        oaDimissionHandover.setHandoverSchedule(START_NODE);
        //审核时间
        oaDimissionHandover.setLeadershipContentTime(new Date());
        //审核人
        oaDimissionHandover.setUpdatedBy(personnel.getPersonnelName());
        //流程记录
        OaFlowSchedule flowSchedule = new OaFlowSchedule();
        // 流程记录id
        flowSchedule.setPkFlowScheduleId(idToobtainUtils.getNumberId());
        // 离职流程id  部门领导审核节点
        flowSchedule.setFlowId(AUDIT_DEPARTMENT_NODE);
        // 绑定表单
        flowSchedule.setFormId(oaDimissionHandover.getPkDimissionHandoverId());
        // 人员id
        flowSchedule.setPersonnelId(personnel.getPkPersonnelId());
        // 不通过原因
        flowSchedule.setFormReason(departmentLeadership);
        //审核人
        flowSchedule.setCreatedBy(personnel.getPersonnelName());
        // 新增离职流程记录
        scheduleMapper.insertSelective(flowSchedule);
        // 删除多余的通知
        messageMapper.deleteByFormId(oaDimissionHandover.getPkDimissionHandoverId());
        // 新建通知
        OaMessage message=new OaMessage();
        message.setPkMessageId(idToobtainUtils.getNumberId());
        // 链接地址
        message.setMessageUrl("pages/dkmoa/front/flow/dimissionHover/dimissionHoverAdd.html?pkDimissionHandoverId=");

        addMeassge(message,personnel.getPersonnelName(),oaDimissionHandover.getPkDimissionHandoverId(),
                oaDimissionHandover.getDimissionHandoverName(),"2");
        //不通过
        noPass(oaDimissionHandover.getHandoverDepartmentReceiver(),message.getPkMessageId());
        return handoverMapper.updateByPrimaryKeySelective(oaDimissionHandover);
    }

    /**
     * 行政部填写
     * @param handover  叫交接工作
     * @param personnel 人员
     * @return 增加行数
     */
    @Override
    public int sectionPass(OaDimissionHandover handover, OaPersonnel personnel) {
        // S为当事人确认
        handover.setIsRevision("P");
        // 进度设置为行政部审核
        handover.setHandoverSchedule(AUDIT_PERSON_NODE);
        // 行政部填写人
        handover.setHandoverReceiver(personnel.getPersonnelName());
        //审核时间
        handover.setLeadershipContentTime(new Date());
        //审核人
        handover.setUpdatedBy(personnel.getPersonnelName());
        //流程记录
        OaFlowSchedule flowSchedule = new OaFlowSchedule();
        // 流程记录id
        flowSchedule.setPkFlowScheduleId(idToobtainUtils.getNumberId());
        // 离职流程id  行政部审核节点
        flowSchedule.setFlowId(AUDIT_SECTION_NODE);
        // 绑定表单
        flowSchedule.setFormId(handover.getPkDimissionHandoverId());
        // 人员id
        flowSchedule.setPersonnelId(personnel.getPkPersonnelId());
        // 通过原因
        flowSchedule.setFormReason(" ");
        //审核人
        flowSchedule.setCreatedBy(personnel.getPersonnelName());
        // 新增离职流程记录
        scheduleMapper.insertSelective(flowSchedule);
        // 删除多余的通知
        messageMapper.deleteByFormId(handover.getPkDimissionHandoverId());
        // 新建通知
        OaMessage message=new OaMessage();
        // 链接地址
        message.setMessageUrl("pages/dkmoa/front/flow/dimissionHover/dimissionHoverClient.html?pkDimissionHandoverId=");
        //通知id
        message.setPkMessageId(idToobtainUtils.getNumberId());

        OaDimissionHandoverVo byId = handoverMapper.findById(handover.getPkDimissionHandoverId());
        //增加信息 2待办
        addMeassge(message,personnel.getPersonnelName(),handover.getPkDimissionHandoverId(),
                  byId.getPersonnelName()+"的离职交接表","2");
        //关联通知
        OaInform inform=new OaInform();
        // 关联id
        inform.setFkInformId(idToobtainUtils.getNumberId());
        // 人员id
        inform.setPersonnelId(byId.getPkPersonnelId());
        // 通知id
        inform.setMessageId(message.getPkMessageId());
        // 设置为 0 未读
        inform.setIsState("0");
        //新增通知关联
        informMapper.insertSelective(inform);

        return handoverMapper.updateByPrimaryKeySelective(handover);
    }

    /***
     * 当事人确认
     * @param pkDimissionHandoverId 流程ID
     * @param personnel 操作人
     * @return 增加的数据的行数
     */
    @Override
    public int personPass(Long pkDimissionHandoverId,OaPersonnel personnel) {
        OaDimissionHandover oaDimissionHandover = handoverMapper.selectByPrimaryKey(pkDimissionHandoverId);
        //当事人确认的时间
        oaDimissionHandover.setPersonnelDateSign(new Date());
        // G为人事经理审核
        oaDimissionHandover.setIsRevision("G");
        // 进度设置为人事经理审核
        oaDimissionHandover.setHandoverSchedule(AUDIT_STAFFING_NODE);
        //审核人
        oaDimissionHandover.setUpdatedBy(personnel.getPersonnelName());
        //流程记录
        OaFlowSchedule flowSchedule = new OaFlowSchedule();
        // 流程记录id
        flowSchedule.setPkFlowScheduleId(idToobtainUtils.getNumberId());
        // 离职流程id  当事人确认节点
        flowSchedule.setFlowId(AUDIT_PERSON_NODE);
        // 绑定表单
        flowSchedule.setFormId(oaDimissionHandover.getPkDimissionHandoverId());
        // 人员id
        flowSchedule.setPersonnelId(personnel.getPkPersonnelId());
        // 通过原因
        flowSchedule.setFormReason(" ");
        //审核人
        flowSchedule.setCreatedBy(personnel.getPersonnelName());
        // 新增离职流程记录
        scheduleMapper.insertSelective(flowSchedule);
        // 删除多余的通知
        messageMapper.deleteByFormId(pkDimissionHandoverId);
        // 新建通知
        OaMessage message=new OaMessage();
        // 链接地址
        message.setMessageUrl("pages/dkmoa/front/flow/dimissionHover/dimissionHoverManager.html?pkDimissionHandoverId=");
        //通知id
        message.setPkMessageId(idToobtainUtils.getNumberId());
        addMeassge(message,personnel.getPersonnelName(),oaDimissionHandover.getPkDimissionHandoverId(),
                oaDimissionHandover.getDimissionHandoverName(),"2");
        // 根据流程id查询人员
        List<Long> personnelIds= personnelMapper.selectByHover("HOVER_EX");
        findPersons(personnelIds,message);
        return handoverMapper.updateByPrimaryKeySelective(oaDimissionHandover);
    }

    /**
     * 人事经理审核
     *
     * @param pkDimissionHandoverId 流程ID
     * @param personnel 操作id
     * @return 增加的数据的行数
     */
    @Override
    public int staffingPass(Long pkDimissionHandoverId, OaPersonnel personnel) {
        OaDimissionHandover oaDimissionHandover = handoverMapper.selectByPrimaryKey(pkDimissionHandoverId);
        //人事经理通过的时间
        oaDimissionHandover.setManagerSignature(new Date());
        // E为总经理审核
        oaDimissionHandover.setIsRevision("E");
        // 进度设置为总经理审核
        oaDimissionHandover.setHandoverSchedule(AUDIT_EXECUTIVE_NODE);
        //审核时间
        oaDimissionHandover.setLeadershipContentTime(new Date());
        //审核人
        oaDimissionHandover.setUpdatedBy(personnel.getPersonnelName());
        //流程记录
        OaFlowSchedule flowSchedule = new OaFlowSchedule();
        // 流程记录id
        flowSchedule.setPkFlowScheduleId(idToobtainUtils.getNumberId());
        // 离职流程id  人事经理审核节点
        flowSchedule.setFlowId(AUDIT_STAFFING_NODE);
        // 绑定表单
        flowSchedule.setFormId(oaDimissionHandover.getPkDimissionHandoverId());
        // 人员id
        flowSchedule.setPersonnelId(personnel.getPkPersonnelId());
        // 通过原因
        flowSchedule.setFormReason(" ");
        //审核人
        flowSchedule.setCreatedBy(personnel.getPersonnelName());
        // 新增离职流程记录
        scheduleMapper.insertSelective(flowSchedule);
        // 删除多余的通知
        messageMapper.deleteByFormId(oaDimissionHandover.getPkDimissionHandoverId());
        // 新建通知
        OaMessage message=new OaMessage();
        // 链接地址
        message.setMessageUrl("pages/dkmoa/front/flow/dimissionHover/dimissionHoverExecutive.html?pkDimissionHandoverId=");
        //通知id
        message.setPkMessageId(idToobtainUtils.getNumberId());
        addMeassge(message,personnel.getPersonnelName(),oaDimissionHandover.getPkDimissionHandoverId(),
                oaDimissionHandover.getDimissionHandoverName(),"2");
        // 根据流程id查询人员
        List<Long> personnelIds= personnelMapper.selectByHover("HOVER_GME");
        findPersons(personnelIds,message);
        return handoverMapper.updateByPrimaryKeySelective(oaDimissionHandover);
    }

    /**
     * 人事经理不通过
     */
    @Override
    public int staffingNoPass(Long pkDimissionHandoverId, OaPersonnel personnel, String formReason) {
        OaDimissionHandover oaDimissionHandover = handoverMapper.selectByPrimaryKey(pkDimissionHandoverId);
        // P为当事人确认
        oaDimissionHandover.setIsRevision("P");
        // 进度设置为当事人审核
        oaDimissionHandover.setHandoverSchedule(AUDIT_PERSON_NODE);
        //审核时间
        oaDimissionHandover.setLeadershipContentTime(new Date());
        //审核人
        oaDimissionHandover.setUpdatedBy(personnel.getPersonnelName());
        //流程记录
        OaFlowSchedule flowSchedule = new OaFlowSchedule();
        // 流程记录id
        flowSchedule.setPkFlowScheduleId(idToobtainUtils.getNumberId());
        // 离职流程id  人事经理审核节点
        flowSchedule.setFlowId(AUDIT_STAFFING_NODE);
        // 绑定表单
        flowSchedule.setFormId(oaDimissionHandover.getPkDimissionHandoverId());
        // 人员id
        flowSchedule.setPersonnelId(personnel.getPkPersonnelId());
        // 通过原因
        flowSchedule.setFormReason(formReason);
        //审核人
        flowSchedule.setCreatedBy(personnel.getPersonnelName());
        // 新增离职流程记录
        scheduleMapper.insertSelective(flowSchedule);
        // 新建通知
        OaMessage message=new OaMessage();
        //通知id
        message.setPkMessageId(idToobtainUtils.getNumberId());
        // 链接地址
        message.setMessageUrl("pages/dkmoa/front/flow/dimissionHover/dimissionHoverClient.html?pkDimissionHandoverId=");

        addMeassge(message,personnel.getPersonnelName(),oaDimissionHandover.getPkDimissionHandoverId(),
                oaDimissionHandover.getDimissionHandoverName(),"2");
        OaDimissionHandoverVo byId = handoverMapper.findById(oaDimissionHandover.getPkDimissionHandoverId());
        noPass(byId.getPkPersonnelId(),message.getPkMessageId());
        return handoverMapper.updateByPrimaryKeySelective(oaDimissionHandover);
    }

    /**
     * 总经理通过
     * @param pkDimissionHandoverId 流程ID
     * @param personnel 操作人
     * @return 增加的条数
     */
    @Override
    public int executivePass(Long pkDimissionHandoverId, OaPersonnel personnel) {
        OaDimissionHandover oaDimissionHandover = handoverMapper.selectByPrimaryKey(pkDimissionHandoverId);
        //总经理签字日期
        oaDimissionHandover.setSignatureGeneralManager(new Date());
        // 1为结束
        oaDimissionHandover.setIsRevision("1");
        // 进度设置为总经理审核
        oaDimissionHandover.setHandoverSchedule(OVER_NODE);
        //审核时间
        oaDimissionHandover.setLeadershipContentTime(new Date());
        //审核人
        oaDimissionHandover.setUpdatedBy(personnel.getPersonnelName());
        //流程记录
        OaFlowSchedule flowSchedule = new OaFlowSchedule();
        // 流程记录id
        flowSchedule.setPkFlowScheduleId(idToobtainUtils.getNumberId());
        // 离职流程id  人事经理审核节点
        flowSchedule.setFlowId(AUDIT_EXECUTIVE_NODE);
        // 绑定表单
        flowSchedule.setFormId(oaDimissionHandover.getPkDimissionHandoverId());
        // 人员id
        flowSchedule.setPersonnelId(personnel.getPkPersonnelId());
        // 通过原因
        flowSchedule.setFormReason("");
        //审核人
        flowSchedule.setCreatedBy(personnel.getPersonnelName());
        // 新增离职流程记录
        scheduleMapper.insertSelective(flowSchedule);
        // 删除多余的通知
        messageMapper.deleteByFormId(oaDimissionHandover.getPkDimissionHandoverId());
        // 新建通知
        OaMessage message=new OaMessage();
        // 链接地址
        message.setMessageUrl("pages/dkmoa/front/flow/dimissionHover/dimissionHoverFrom.html?pkDimissionHandoverId=");
        //通知id
        message.setPkMessageId(idToobtainUtils.getNumberId());
        addMeassge(message,personnel.getPersonnelName(),oaDimissionHandover.getPkDimissionHandoverId(),
                oaDimissionHandover.getDimissionHandoverName(),"2");
        return handoverMapper.updateByPrimaryKeySelective(oaDimissionHandover);
    }

    /**
     * 总经理 不通过
     * @param pkDimissionHandoverId 流程ID
     * @param personnel 操作人
     * @param formReason 不通过的原因
     * @return 增加的数据的行数
     */
    @Override
    public int executiveNoPass(Long pkDimissionHandoverId, OaPersonnel personnel, String formReason) {
        OaDimissionHandover oaDimissionHandover = handoverMapper.selectByPrimaryKey(pkDimissionHandoverId);
        // G 为人事确认
        oaDimissionHandover.setIsRevision("G");
        // 进度设置为人事经理审核
        oaDimissionHandover.setHandoverSchedule(AUDIT_EXECUTIVE_NODE);
        //审核时间
        oaDimissionHandover.setLeadershipContentTime(new Date());
        //审核人
        oaDimissionHandover.setUpdatedBy(personnel.getPersonnelName());
        //流程记录
        OaFlowSchedule flowSchedule = new OaFlowSchedule();
        // 流程记录id
        flowSchedule.setPkFlowScheduleId(idToobtainUtils.getNumberId());
        // 离职流程id  人事经理审核节点
        flowSchedule.setFlowId(AUDIT_STAFFING_NODE);
        // 绑定表单
        flowSchedule.setFormId(oaDimissionHandover.getPkDimissionHandoverId());
        // 人员id
        flowSchedule.setPersonnelId(personnel.getPkPersonnelId());
        // 通过原因
        flowSchedule.setFormReason(formReason);
        //审核人
        flowSchedule.setCreatedBy(personnel.getPersonnelName());
        // 新增离职流程记录
        scheduleMapper.insertSelective(flowSchedule);
        // 删除多余的通知
        messageMapper.deleteByFormId(oaDimissionHandover.getPkDimissionHandoverId());
        // 新建通知
        OaMessage message=new OaMessage();
        //通知id
        message.setPkMessageId(idToobtainUtils.getNumberId());
        addMeassge(message,personnel.getPersonnelName(),oaDimissionHandover.getPkDimissionHandoverId(),
                oaDimissionHandover.getDimissionHandoverName(),"2");
        return handoverMapper.updateByPrimaryKeySelective(oaDimissionHandover);
    }

    @Override
    public OaDimissionHandover selectById(Long pkDimissionHandoverId) {
        return handoverMapper.selectByPrimaryKey(pkDimissionHandoverId);
    }

    @Override
    public int update(OaDimissionHandover record) {
        return 0;
    }

    @Override
    public int deleteByPrimaryKey(Long pkDimissionHandoverId) {
        return handoverMapper.deleteByPrimaryKey(pkDimissionHandoverId);
    }

    @Override
    public List<OaDimissionHandover> findAll(OaDimissionHandover handover, Integer page, Integer limit, String startDate, String endDate) {
        PageHelper.startPage(page, limit);
        return handoverMapper.findAll(handover, startDate, endDate);
    }

    @Override
    public Long rowCount(OaDimissionHandover handover, String startDate, String endDate) {
        return handoverMapper.rowCount(handover, startDate, endDate);
    }

    @Override
    public OaDimissionHandoverVo findById(Long pkDimissionHandoverId) {
        return handoverMapper.findById(pkDimissionHandoverId);
    }

    @Override
    public List<OaDimissionHandover> selectAll(List<Long> list) {
        return handoverMapper.selectAll(list);
    }

    @Override
    public int deleteAll(List<Long> list) {
        return handoverMapper.deleteAll(list);
    }

    /**
     * 通知人
     * @param personnelIds 通知人员的集合
     * @param message 通知
     */
    public void findPersons(List<Long> personnelIds,OaMessage message){
        if(personnelIds.size()>0){
            // 通知人员关联集合
            List<OaInform> informs=new ArrayList<>();
            // 循环加入通知关联
            for (Long personnelId : personnelIds) {
                // 新建通知关联
                OaInform inform=new OaInform();
                // 通知关联id
                inform.setFkInformId(idToobtainUtils.getNumberId());
                // 设置为未读
                inform.setIsState("0");
                // 通知id
                inform.setMessageId(message.getPkMessageId());
                // 人员id
                inform.setPersonnelId(personnelId);
                // 加入通知关联
                informs.add(inform);
            }
            // 新增通知关联集合
            informMapper.insertAll(informs);
        }

    }

    /**
     * 不通过的情况下或者通知个人
     * @param personnelId 人员idid
     * @param pkMessageId 通知
     */
    public void noPass(Long personnelId,Long pkMessageId){
        //关联通知
        OaInform inform=new OaInform();
        // 关联id
        inform.setFkInformId(idToobtainUtils.getNumberId());
        // 人员id
        inform.setPersonnelId(personnelId);
        // 通知id
        inform.setMessageId(pkMessageId);
        // 设置为 0 未读
        inform.setIsState("0");
        //新增通知关联
        informMapper.insertSelective(inform);
    }

    /**
     * 增加通知
     * @param message 通知实体
     * @param createdBy 创建人
     * @param pkDimissionId 交接流程
      * @param messgeName 通知名族
     * @param isRevision 有效性
     */
    public void addMeassge(OaMessage message,String createdBy,Long pkDimissionId,String messgeName,String isRevision){
        //创建人
        message.setCreatedBy(createdBy);
        //流程id
        message.setFormId(pkDimissionId);
        // 通知标题
        message.setMessageName(messgeName);
        //状态
        message.setIsRevision(isRevision);
        // 新增通知
        messageMapper.insertSelective(message);
    }
}
